import json

import requests
from flask import request

# 接口key
key = 'WNMBZ-35V3W-P7FRB-3GABJ-XWTY3-AZF4C'
geocoder_url = 'https://apis.map.qq.com/ws/geocoder/v1/'
suggestion_url = 'https://apis.map.qq.com/ws/place/v1/suggestion/'  # 获取输入关键字的补完与提示

district_search_url = 'https://apis.map.qq.com/ws/district/v1/search'  # 搜索关键词为xxx的行政区划
district_url = 'https://apis.map.qq.com/ws/district/v1/list'  # 获取全部行政区划数据
district_getchildren_url = 'https://apis.map.qq.com/ws/district/v1/getchildren'  # 根据ID，获取其的子级行政区划

search_url = 'https://apis.map.qq.com/ws/place/v1/search' # 周边搜索：如，搜索颐和园附近半径500米内的酒店（一个圆形范围）
search_place_url = 'https://apis.map.qq.com/ws/place/v1/search' # 城市/区域搜索,指定地区名称
search_explore_url = 'https://apis.map.qq.com/ws/place/v1/explore' # 周边推荐,只需提供搜索中心点及半径（无须关键词），即可搜索获取周边高热度地点， 一般用于发送位置、门店签到等场景，自动为用户提供备选地点列表
search_id_url = 'https://apis.map.qq.com/ws/place/v1/detail' # 查询ID为6621879543162709731的地点信息

def geocoder(params):
    url = geocoder_url
    if params == None:
        raise 'params must be not empty'
    if params['address'] == None or len(params['address']) == 0 or (params['address'].isspace()):
        raise 'address must be not empty'
    params['key'] = key

    print(f'url ==> {url}')
    print(f'params ==> {params}')
    response = requests.get(url, params)
    print(json.dumps(response.json(), ensure_ascii=False))
    return response


'''
用于获取输入关键字的补完与提示，帮助用户快速输入。本接口为纯HTTP数据接口，需配合前端程序实现Autocomplete（自动完成）的效果。
keyword(Y)用户输入的关键词（希望获取后续提示的关键词）(keyword=南方)
region(N) 限制城市范围： 根据城市名称限制地域范围， 如，仅获取“广州市”范围内的提示内容（region=广州）； 缺省时侧进行全国范围搜索；
region_fix(N) 0：[默认]当前城市无结果时，自动扩大范围到全国匹配 1：固定在当前城市
location(N) 定位坐标，传入后，若用户搜索关键词为类别词（如酒店、餐馆时），与此坐标距离近的地点将靠前显示，格式： location=lat,lng (location=39.11457,116.55332)
get_subpois(N) 是否返回子地点，如大厦停车场、出入口等取值： 0 [默认]不返回 1 返回
filter(N) 筛选条件： 基本语法：columnName<筛选列>=value<列值>；(filter=category=公交站 或 filter=category=大学,中学)
          目前支持按POI分类筛选（例：category=分类词），若指定多个分类用英文逗号分隔，最多支持五个分类,支持的分类词可参考：附录：腾讯地图POI分类关键词
address_format(N) 可选值：short 返回“不带行政区划的”短地址
page_index(N) 页码，从1开始，最大页码需通过count进行计算，必须与page_size同时使用(page_index=1)
page_size(N) 每页条数，取值范围1-20，必须与page_index 同时使用(page_size=10)
'''


def suggestion(params):
    url = suggestion_url
    if params == None:
        raise 'params must be not empty'
    if params['keyword'] == None or len(params['keyword']) == 0 or (params['keyword'].isspace()):
        raise 'keyword must be not empty'
    params['key'] = key
    # print(f'url ==> {url}')
    # print(f'params ==> {params}')
    response = requests.get(url, params)
    response_json = response.json()
    # if response_json.get('data'):
    #     data = response_json['data']
    #     for item in data:
    #         print(item)
    return json.dumps(response_json, ensure_ascii=False)


# 获取全部行政区划数据
def district():
    url = district_url
    print(f'url ==> {url}')
    response = requests.get(url)
    response_json = response.json()
    result = response_json['result']
    for item in result:
        print(item)
    return json.dumps(response_json, ensure_ascii=False)


# 根据ID，获取其的子级行政区划
# 本接口支持获取 指定区县（三级）其下乡镇/街道（四级）列表
# 父级行政区划ID（adcode），缺省时返回一级行政区划，也就是省级
def getchildren(params):
    url = district_getchildren_url
    if params is not  None:
        if params['id'] is not None and len(params['id']) != 0 and (not params['id'].isspace()):
            params['id'] = id
    else:
        params = {}
    params['key'] = key

    print(f'url ==> {url}')
    print(f'params ==> {params}')
    response = requests.get(url, params)
    response_json = response.json()
    print(response_json)
    result = response_json['result']
    for item in result:
        print(item)
    return json.dumps(response_json, ensure_ascii=False)


# search接口：搜索关键词为xxx的行政区划
# 搜索关键词： 1.支持输入一个文本关键词 2.支持多个行政区划代码(adcode)，英文逗号分隔
def search(params):
    url = district_search_url
    if params == None:
        raise 'params must be not empty'
    if params['keyword'] == None or len(params['keyword']) == 0 or (params['keyword'].isspace()):
        raise 'keyword must be not empty'
    params['key'] = key

    print(f'url ==> {url}')
    print(f'params ==> {params}')
    response = requests.get(url)
    response_json = response.json()
    result = response_json['result']
    for item in result:
        print(item)
    return json.dumps(response_json, ensure_ascii=False)
